# -*- coding: UTF-8 -*- #
"""
-------真正的勇士， 敢于直面惨淡的Warning、 敢于正视淋漓的Error-----
@author : 贾鹏博
@file : 15、数据库操作及断言.py
@time : 2022/6/25 22:14
"""

# ===================================  接口常加数据库断言 ===================================================
"""
一：接口测试响应验证：如何在测试过程中验证接口没有 bug ?
    1.通过接口响应值
    2.通过查询数据库信息辅助验证
二：接口测试数据清理：
    1.通过 Delete 接口删除  - 非常推荐 (逻辑删除)
    2.自动化测试使用干净的测试环境，每次自动化测试执行完成之前或之后做数据还原
三：直接对数据库做查询之外的操作是非常危险的行为
    1.数据库权限给的非常低
    2.表结构复杂，随便删除数据会影响测试，甚至会导致系统出现异常
四：接口测试常用的数据库操作
    1.连接与配置
    2.查询数据与断言
"""

"""
数据库信息：
主机:  litemall.hogwarts.ceshiren.com
端口： 13306
用户名： test
密码： test123456
"""

import pymysql

# =================================================== 数据库封装  ======================================================
"""
数据库封装：
    1.封装数据库配置
    2.封装 sql 查询操作
    3.调用方法执行 sql 语句
"""


# =========================   封装建立连接的对象  ============================
def get_coon():
    coon = pymysql.connect(
        host="litemall.hogwarts.ceshiren.com",
        port=13306,
        user="test",
        password="test123456",
        database="litemall",
        charset="utf8mb4"
    )
    return coon


# ==============================   执行sql  ================================
def execute_sql(sql):
    connent = get_coon()
    cursor = connent.cursor()
    cursor.execute(sql)  # 执行 sql
    record = cursor.fetchone()  # 查询数据库第一条记录
    return record


if __name__ == '__main__':
    print(execute_sql("select * from litemall_cart where user_id=1 and deleted=0 and goods_name='hogwarts1'"))
    print(execute_sql("select * from litemall_cart"))

"""
查询数据与数据库断言:
    1.查询数据，添加查询条件
    2.断言结果部位 None
"""

# 查询 user123 用户的购物车有一个名称为 hogwarts1 的商品
sql_res = execute_sql("select * from litemall_cart where user_id=1 and deleted=0 and goods_name='hogwarts1'")
assert sql_res != None, "没找到 hogwarts1 的商品"
